/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cl.alanis.business;

import cl.alanis.util.Constantes;
import cl.alanis.dao.MarcaDao;
import cl.alanis.dao.ProductoDao;
import cl.alanis.dao.TipoRepuestoDao;
import cl.alanis.dao.impl.MarcaDaoImpl;
import cl.alanis.dao.impl.ProductoDaoImpl;
import cl.alanis.dao.impl.TipoRepuestoDaoImpl;
import cl.alanis.dto.ProductoDto;
import cl.alanis.exception.ProductoExisteException;
import cl.alanis.exception.ProductoNoExisteException;
import cl.alanis.util.AlanisLog;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import org.apache.log4j.Logger;

/**
 *
 * @author Pía
 */
public class ProductoBusiness {
    Logger logger=AlanisLog.obtenerLogger(ProductoBusiness.class);
    ProductoDao daoProducto;
    MarcaDao daoMarca;
    TipoRepuestoDao daoTipoRepuesto;
    
    public List buscarProductoFiltro(ProductoDto producto) throws Exception {
        daoProducto =new ProductoDaoImpl();
        List lista=new ArrayList();
        try {
            lista=daoProducto.obtenerProductoFiltro(producto);
        } catch (Exception ex) {
            logger.error("Error:"+ex.getMessage());
            throw new Exception(ex.getMessage());
        }
        
        return lista;
    }
    public List buscarProductoFiltro2(ProductoDto producto) throws Exception {
        daoProducto =new ProductoDaoImpl();
        List lista=new ArrayList();
        try {
            lista=daoProducto.obtenerProductoFiltro2(producto);
        } catch (Exception ex) {
            logger.error("Error:"+ex.getMessage());
            throw new Exception(ex.getMessage());
        }
        
        return lista;
    }
    public Object[] obtenerFilaTablaBuscaProd(ProductoDto producto) {
        Object[] retorno=new Object[]{producto.getCodProducto(),producto.getCodProveedor(), producto.getDescripcionProducto(),producto.getAplicacion(),producto.getMarca(),producto.getAgnoAuto(),producto.getFabricante(),producto.getTipoRepuesto()};
        return retorno;
    }
    public Object[] obtenerFilaTablaBuscaProd2(ProductoDto producto) {
        Object[] retorno=new Object[]{producto.getCodProducto(), producto.getDescripcionProducto(),producto.getAplicacion(),producto.getNumStock(),producto.getValorVenta(), producto.getMarca(),producto.getAgnoAuto(),producto.getFabricante(),producto.getTipoRepuesto()};
        return retorno;
    }
    public ProductoDto obtenerProducto(ProductoDto producto) throws Exception{
        ProductoDto retorno=new ProductoDto();
        daoProducto =new ProductoDaoImpl();
        try {
            retorno=daoProducto.obtenerProducto(producto);
        }catch(ProductoNoExisteException e){
            logger.debug("Error:"+e.getMessage());
            throw new Exception("Producto no existe");
        } 
        catch (Exception ex) {
            logger.equals("Error:"+ex.getMessage());
            throw ex;
        }
        return retorno;
    }
    
    public List obtenerMarcas() throws Exception{
        daoMarca=new MarcaDaoImpl();
        List lista;
        try {
            lista=daoMarca.obtenerMarcas();
        } catch (Exception ex) {
            logger.error("Error:"+ex.getMessage());
            throw ex;
        }
        
        return lista;
    }

    public List obtenerTipoRepuestos() throws Exception {
        daoTipoRepuesto=new TipoRepuestoDaoImpl();
        List lista;
        try {
            lista=daoTipoRepuesto.obtenerTipoRepuestos();
        } catch (Exception ex) {
            logger.error("Error:"+ex.getMessage());
            throw ex;
        }
        return lista;
    }

    public boolean ingresarProducto(ProductoDto producto) throws Exception {
        daoProducto = new ProductoDaoImpl();
        boolean retorno=false;
        try {
            daoProducto.ingresarProducto(producto);
            daoProducto.commit();
            retorno=true;
        }catch(ProductoExisteException ex){
            daoProducto.rollback();
            logger.error("Error:"+ex.getMessage());
            throw ex;
        } 
        catch (Exception ex) {
            daoProducto.rollback();
            logger.error("Error:"+ex.getMessage());
            throw ex;
        }
        return retorno;
    }

    public void actualizarProducto(ProductoDto producto) throws Exception {
        daoProducto = new ProductoDaoImpl();
        try {
            daoProducto.actualizarProducto(producto);
            daoProducto.commit();
        } catch (Exception ex) {
            daoProducto.rollback();
            logger.error("Error:"+ex.getMessage());
            throw ex;
        }
    }

    public List buscarProductoFiltro3(ProductoDto producto) throws Exception {
        List lista=new ArrayList();
        daoProducto = new ProductoDaoImpl();
        try {
            lista=daoProducto.obtenerProductoFiltro3(producto);
        } catch (Exception ex) {
            logger.error("Error:"+ex.getMessage());
            throw ex;
        }
        return lista;
    }

    public Object[] obtenerFilaTablaBuscaProd3(ProductoDto producto) {
        Object[] retorno=new Object[]{producto.getCodStock(), 
                                      producto.getCodProducto(),
                                      producto.getCodProveedor(),
                                      producto.getDescripcionProducto(),
                                      producto.getAplicacion(),
                                      producto.getMarca(),
                                      producto.getAgnoAuto(),
                                      producto.getOrigenRepuesto(),
                                      producto.getFabricante(),
                                      producto.getTipoRepuesto(),
                                      producto.getValorVenta(),
                                      Math.ceil(producto.getValorVenta()*Constantes.IVA),
                                      Math.ceil(producto.getValorVenta()+producto.getValorVenta()*Constantes.IVA)};
        return retorno;
    }
}
